import { AbstractControl } from '@angular/forms'
import { number } from './number'
import { sfId } from './sf-id'
import { phone } from './phone'

const reg = {
  isZeroStart: /^0\d+/,
  integer: /^[0-9]*$/,
  space: /\s/,
  allEmpty: /^[\s]*$/,
  folder: /[:：/?*'"“‘’”<>|]/,
  chinese: /^[\u4E00-\u9FA5]+$/,
}

/**
 * 校验规则
 */
export class AdValidators {
  /**
   * 是否为整数
   * @param {boolean} isValidatorZeroStart 是否允许0数字开头  true 不允许 false 允许
   * @returns
   */
  static integer(isValidatorZeroStart: boolean = true) {
    const validator = (control: AbstractControl) => {
      if (reg.integer.test(control.value)) {
        if (isValidatorZeroStart && reg.isZeroStart.test(control.value)) {
          return { 不能以0开头: true }
        }
        return null
      }
      return { 必须为整数: true }
    }
    return validator
  }

  static number = number
  /**
   * 是否包含空格
   * @param control
   * @returns
   */
  static space(control: AbstractControl) {
    if (reg.space.test(control.value)) {
      return { 不能包含空格: true }
    }
    return null
  }

  /**
   * 是否全部为空
   * @param control
   * @returns
   */
  static allEmpty(control: AbstractControl) {
    if (reg.allEmpty.test(control.value)) {
      return { 不能全部为空: true }
    }
    return null
  }

  /**
   * 文件夹名称特殊字符校验
   * @param control
   * @returns
   */
  static folder(control: AbstractControl) {
    if (reg.folder.test(control.value)) {
      return { 不能包含特殊字符: true }
    }
    return null
  }

  /**
   * 只能为中文校验
   * @param control
   * @returns
   */
  static chinese(control: AbstractControl) {
    if (!control.value || reg.chinese.test(control.value)) {
      return null
    }
    return { 只能为中文: true }
  }

  static sfId = sfId

  static phone = phone
}
